    package sisgeroupas.model;  
      
    import java.util.ArrayList;  
    import java.util.List;  
    import javax.swing.table.AbstractTableModel;  
    
      
    public class TableModelCliente extends AbstractTableModel {  
      
        private static final long serialVersionUID = 1L;  
      
        /* Lista de Cliente que representam as linhas. */  
        private List<ModelCliente> linhas;  
      
        /* Array de Strings com o nome das colunas. */  
        private String[] colunas = new String[]{  
            "Nome","Data Nasc.","Sexo","Mãe"};  
      
      
      
        /* Cria um CadastroTableModel vazio. */  
        public TableModelCliente() {  
            linhas = new ArrayList<ModelCliente>();  
        }  
      
        /* Cria um CadastroTableModel carregado com 
         * a lista de Cliente especificada. */  
        public TableModelCliente(List<ModelCliente> listaDeClientes) {  
            linhas = new ArrayList<ModelCliente>(listaDeClientes);  
        }  
      
      
        /* Retorna a quantidade de colunas. */  
        @Override  
        public int getColumnCount() {  
            // EstÃ¡ retornando o tamanho do array "colunas".  
            return colunas.length;  
        }  
      
        /* Retorna a quantidade de linhas. */  
        @Override  
        public int getRowCount() {  
            // Retorna o tamanho da lista de Cliente.  
            return linhas.size();  
        }  
      
      
        @Override  
        public String getColumnName(int columnIndex) {  
            // Retorna o conteÃºdo do Array que possui o nome das colunas  
            return colunas[columnIndex];  
        }  
      
        ;  
      
        @Override  
        public Class<?> getColumnClass(int columnIndex) {  
            return String.class;  
        }  
      
        ;  
      
      
        @Override  
        public Object getValueAt(int rowIndex, int columnIndex) {  
                ModelCliente cliente = linhas.get(rowIndex);  
      
            // Retorna o campo referente a coluna especificada.  
            // Aqui é feito um switch para verificar qual é a coluna  
            // e retornar o campo adequado. As colunas sãoas mesmas  
            // que foram especificadas no array "colunas".  
            switch (columnIndex) {  
      
                // Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};  
                case 0:  
                    return cliente.getNome();  
                case 1:  
                    return cliente.getDataNascimento();
                case 2:  
                    return cliente.getSexo();  
                case 3:  
                    return cliente.getNomeMae();  
                default:  
                    // Isto não deveria acontecer...  
                    throw new IndexOutOfBoundsException("columnIndex out of bounds");  
            }  
        }  
      
    @Override  
    //modifica na linha e coluna especificada  
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
          ModelCliente cliente = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
      
         switch (columnIndex) { // Seta o valor do campo respectivo  
             case 0:  
                 cliente.setNome(aValue.toString());  
             case 1:  
                 cliente.setDataNascimento(aValue.toString());  
             case 2:  
                 cliente.setSexo(aValue.toString());  
             case 3:  
                 cliente.setNomeMae(aValue.toString());
      
             default:  
                 // Isto não deveria acontecer...               
         }  
         fireTableCellUpdated(rowIndex, columnIndex);  
         }  
      
        //modifica na linha especificada  
        public void setValueAt(ModelCliente aValue, int rowIndex) {  
            ModelCliente cliente = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
      
            cliente.setNome(aValue.getNome()); 
            cliente.setDataNascimento(aValue.getDataNascimento()); 
            cliente.setSexo(aValue.getSexo()); 
            cliente.setNomeMae(aValue.getNomeMae()); 
             
      
            fireTableCellUpdated(rowIndex, 0);  
            fireTableCellUpdated(rowIndex, 1);  
            fireTableCellUpdated(rowIndex, 2);
            fireTableCellUpdated(rowIndex, 3); 
      
        }  
        ;  
      
      
        ;  
      
      
        @Override  
        public boolean isCellEditable(int rowIndex, int columnIndex) {  
            return false;  
        }  
      
      
        public ModelCliente getCliente(int indiceLinha) {  
            return linhas.get(indiceLinha);  
        }  
      
      
      
        /* Adiciona um registro. */  
        public void addCadastro(ModelCliente m) {  
            // Adiciona o registro.  
            linhas.add(m);  
      
      
            int ultimoIndice = getRowCount() - 1;  
      
            fireTableRowsInserted(ultimoIndice, ultimoIndice);  
        }  
      
        /* Remove a linha especificada. */  
        public void removeCadastro(int indiceLinha) {  
            linhas.remove(indiceLinha);  
      
            fireTableRowsDeleted(indiceLinha, indiceLinha);  
        }  
      
        /* Adiciona uma lista de Cliente ao final dos registros. */  
        public void addListaDeCadastro(List<ModelCliente> cadastro) {  
            // Pega o tamanho antigo da tabela.  
            int tamanhoAntigo = getRowCount();  
      
            // Adiciona os registros.  
            linhas.addAll(cadastro);  
      
            fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);  
        }  
      
        /* Remove todos os registros. */  
        public void limpar() {  
            linhas.clear();  
      
      
            fireTableDataChanged(); 
            
        }  
      
        /* Verifica se este table model esta vazio. */  
        public boolean isEmpty() {  
            return linhas.isEmpty();  
        }  
      
      
      
    }  